package com.adv.io_4;

import java.io.*;
import java.util.*;

/**
 * 1:福彩“双色球”是民政部公开发行的彩票，每注投注号码由6个红色球号码和1个蓝色球号码组成。红色球号码从1--33中选择；蓝色球号码从1--16中选择。
 * 购买时，红色球号码中选择6个号码，从蓝色球号码中选择1个号码，组合成1注投注号码.
 * 
 * 要求生成一注中奖号码，务必按照红球6个号码在前，1个篮球号码在后的方式排列，同时红球号按照顺序排列。并序列化到文件中永久保存
 * （提示：可以用List保存中奖号码）
 * 
 * 3：参考1,把中奖号码从序列化文件中读取后,输入用户购买的彩票好,确定中的奖项,规则如下:
 * 一等奖：7个号码相符（6个红色球号码和1个蓝色球号码）（红色球号码顺序不限，下同） 二等奖：6个红色球号码相符；
 * 三等奖：5个红色球号码和1个蓝色球号码相符； 四等奖：5个红色球号码，或4个红色球号码和1个蓝色球号码相符；
 * 五等奖：4个红色球号码，或3个红色球号码和1个蓝色球号码相符； 六等奖：1个蓝色球号码相符（有无红色球号码相符均可）。
 * 
 * @author zhaoyang
 *
 */
public class IOwork1_lotteryTicket implements Serializable {

	ArrayList<Integer> list = new ArrayList<>();

	public boolean getLottery() {// 摇奖的方法
		// 先摇6个不重复的红球
		int num = 0;
		while (list.size() < 6) {
			num = (int) (Math.random() * 33 + 1);
			if (!list.contains(num)) {
				list.add(num);
			}
		}
		Collections.sort(list);
		// System.out.println(list);
		// 再摇1个蓝球
		list.add((int) (Math.random() * 16 + 1));
		// 序列化
		ObjectOutputStream oout = null;
		try {
			oout = new ObjectOutputStream(new FileOutputStream(new File("Lottery.txt")));
			oout.writeObject(list);
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		} finally {
			try {
				oout.close();
			} catch (IOException e) {
				e.printStackTrace();
				return false;
			}
		}
		return true;
	}

	// 反序列化取出来的方法
	public ArrayList<Integer> getLuckyNum() {
		ObjectInputStream oint = null;
		try {
			oint = new ObjectInputStream(new FileInputStream("Lottery.txt"));
			ArrayList<Integer> list = (ArrayList) oint.readObject();
			System.out.println(list);
			return list;
		} catch (Exception e) {
			System.out.println("没找到中奖号码!");
			e.printStackTrace();
		} finally {
			if (oint != null)
				try {
					oint.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
		}
		return null;
	}

	// 判断中了几等奖的方法
	public int compareNum(int[] a) {
		int redCount = 0;
		int blueCount = 0;
		ArrayList<Integer> list = getLuckyNum();
		if (list.contains(a[6])) {
			blueCount++;
		}
		ArrayList<Integer> list2 = list;
		list2.remove(list2.size() - 1);
		for (int i = 0; i < a.length - 1; i++) {
			if (list2.contains(a[i])) {
				redCount++;
			}
		}
		if (redCount == 6 && blueCount == 1) {
			System.out.println("恭喜您中了一等奖：7个号码相符！");
			return 1;
		} else if (redCount == 6) {
			System.out.println("恭喜您中了二等奖：6个红色球号码相符！");
			return 1;
		} else if (redCount == 5 && blueCount == 1) {
			System.out.println("恭喜您中了三等奖：5个红色球号码和1个蓝色球号码相符！");
			return 1;
		} else if ((redCount == 5) || (redCount == 4 && blueCount == 1)) {
			System.out.println("恭喜您中了四等奖：5个红色球号码，或4个红色球号码和1个蓝色球号码相符！");
			return 1;
		} else if ((redCount == 4) || (redCount == 3 && blueCount == 1)) {
			System.out.println("恭喜您中了五等奖：4个红色球号码，或3个红色球号码和1个蓝色球号码相符！");
			return 1;
		} else if (blueCount == 1) {
			System.out.println("恭喜您中了六等奖：1个蓝色球号码相符！");
			return 1;
		} else {
			System.out.println("您没有中奖！");
			return 0;
		}

	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner input = new Scanner(System.in);
		IOwork1_lotteryTicket lot = new IOwork1_lotteryTicket();
		int[] num = new int[7];
		lot.getLottery();// 摇出中奖号码
		// System.out.println("本期中奖号码：" + lot.getLuckyNum());
		for (int i = 0; i <= 5; i++) {// 输入用户购买的彩票号码
			boolean flag = false;
			int temp;
			do {// 判断红球不得重复，如果重复，重新输入
				flag = false;
				System.out.print("请输入您的第" + (i + 1) + "个红球号码：");
				temp = input.nextInt();
				for (int j = 0; j <= i; j++) {
					if (temp == num[j]) {
						System.err.println("输入有误！红球号码不会相同！");
						flag = true;
					}
				}
			} while (flag);
			num[i] = temp;

		}
		// 输入篮球
		System.out.print("请输入您的篮球号码：");
		num[6] = input.nextInt();
		System.out.println("您的号码：" + Arrays.toString(num));

		System.out.print("本期中奖号码：");
		lot.compareNum(num);
	}

}
